//
//  main.c
//  c-test
//
//  Created by edz on 2020/7/4.
//  Copyright © 2020 edz. All rights reserved.
//



#if 0
/* 上台阶问题
 - 问题描述
   小孩上台阶,一次可以上1级台阶,或者2级台阶.假设一共3级台阶,一共有3种方法: 第一次1级,第二次1级,第三次1级;第一次1级,第二次2级; 第一次2级,第二次1级.

   请回答假设一共n级台阶,一共有多少种上台阶的方法.

 - 答题要求
   实现函数 `int solution(int n);` 输入n为台阶数,返回值为按照题目描述上台阶的方法数.
*/
/*
 分析：上最后一级台阶有两种可能
 1. 从倒数第二级上   2. 从倒数第三级上
 所以上最后一级台阶的可能就是 上前两个台阶方法的和
 */
#include <stdio.h>

int solution(int n);

int main(int argc, const char * argv[]) {
    int a = 6;
    printf("%d\n",solution(a));

    return 0;
}

int solution(int n){
    if (n == 0) {
        return 0;
    }
    if (n == 1) {
        return 1;
    }
    if (n == 2) {
        return 2;
    }
    return solution(n-1) + solution(n-2);
}
#endif



#if 0
/*
 求符合要求的4位数
 - 问题描述
   找出符合要求的所有4位数, 使得该4位数为每个位数的4次方之和. 举例来说:

   1634为符合要求的4位数, 因为 1<sup>4</sup> + 6<sup>4</sup> + 3<sup>4</sup> + 4<sup>4</sup> = 1 + 1296 + 81 + 256 = 1634

 - 答题要求:
   在 `main` 函数中打印出符合上述要求的所有4位数.
 */
#include <stdio.h>
#include <math.h>
int main(){
    int n ,sum;
    for (n = 1000; n < 10000; n++) {
        int m = n;
        sum = 0;
        for (int i = 0; i < 4; i++) {
            sum += pow((m % 10), 4);
            m = m / 10;
        }
        if (sum == n) {
            printf("%d\n",n);
        }
    }
    return 0;
}
#endif

